// 导入wechat-http模块
import http from 'wechat-http'

// 配置URL地址根路径
http.baseURL='http://cba.itlike.com/public/index.php?s=/api/'

// 请求拦截器：统一注入token
// http.intercept.request = (请求对象) => {}
http.intercept.request = (options) => {
  // 注入token：不可以按照Vue的写法，header默认是undefined
  // console.log('注入token', options.header) // header默认是undefined
  // options.header.Authorization = 'Bearer' + 'token'
  const app = getApp()
  const token = app.token
  let authHeader = {}
  if (token) {
    authHeader = {'Access-Token': token, platform: 'H5'}
    options.header = authHeader
  }

  // 注入token：不可以这样赋值，因为会覆盖已有的默认的header，此时头部信息只有Authorization，不合适
  // options.header = {Authorization = 'Bearer' + 'token'}

  // 注入token
  // options.header = {将Authorization和默认的header合并到一个对象中}
  // const app = getApp()
  // const token = app.token
  // let authHeader = {}
  // if (token) {
  //   authHeader = {Authorization: token}
  // }
  // options.header = Object.assign({}, authHeader, options.header)

  // 必须返回options
  return options
}

// 响应拦截器
// http.intercept.response = (response) => {return response.data}
// http.intercept.response = async ({data, config}) => {
  // 判断token是否过期
  // if (data.code === 401) {
    // 读取refreshToken
    // console.log(getApp().refreshToken)

    // 进一步判断请求地址是否是'/refreshToken'
    // 提示：如果状态码是401，并且请求地址是'/refreshToken'，那就说明refreshToken过期了
    // config.url得到的是请求地址的全路径：'https://live-api.itheima.net/refreshToken'
    // if (config.url.includes('/refreshToken')) {
    //   const pages = getCurrentPages()
    //   const currentPage = pages.pop()

      // 如果页面绑定到底部导航栏上，那么就不能使用redirectTo去跳转页面，只能使用switchTab跳转
      // 所以登录之后的页面跳转，需要判断redirectURL的值(页面路径)是否绑定了底部导航栏
    //   return wx.redirectTo({
    //     url: '/pages/login/index?redirectURL=/' + currentPage.route,
    //   })
    // }

    // 使用refreshToken调接口，获取新的token
    // const {data} = await http({
    //   url: '/refreshToken',
    //   method: 'POST',
    //   header: {
    //     Authorization: 'Bearer ' + getApp().refreshToken // 这里不能使用过期的token
    //   }
    // })
    // console.log(data)
    // 将重新获取的token和refreshToken存储到本地
    // getApp().setUserToken('token', data.token)
    // getApp().setUserToken('refreshToken', data.refreshToken)
    
    // 当换取新的token成功之后，在用户无感知的情况下，默默的再次向userInfo接口发送请求
    // console.log(config) // 请求对象，返回的是旧Authorization，需要将里面的Authorization更新为新的
    // 获取并将原来的请求对象信息和新的token认证信息合并为一个请求对象
    // Object.assign(config, {
    //   header: {
    //     Authorization: 'Bearer ' + data.token //新token
    //   }
    // })
    // return http(config)

    // 以下写法不合理
    // 有可能在访问其他接口时出现401，哪个接口出现401，换取新token就会默默的再次请求接口
    // return http({
    //   url: '/userInfo',
    //   method: 'GET',
    //   header: {
    //     Authorization: 'Bearer ' + data.token
    //   }
    // })
//   }
//   return data
// }

// 默认导出模块
export default http
// 挂载到全局对象wx
wx.http = http